#include "Item.h"
#include "Defines.h"



// todo: all data type names to common defines.
namespace
{
QString VALUE_FIELD_NAME = "value";
}


Item::Item(AbstractItem* parent) :
    AbstractItem(ItemCategory_Item, parent)
{
    d = new Data();

    setData(NameData, "Unknown");
}



Item::Item(const QString& name, AbstractItem* parent) :
    AbstractItem(ItemCategory_Item, parent)
{
    d = new Data();
    setData(NameData, name);
}



int Item::fieldCount() const
{
    return (Item::DataType_LAST - AbstractItem::DataType_FIRST + 1);
}



QString Item::fieldName(const int &data_type) const
{
    QString name = AbstractItem::fieldName(data_type);
    if (!name.isEmpty()) return name;

    switch (data_type)
    {
    case ValueData: return VALUE_FIELD_NAME;
    default:        return QString::null;
    }
}



int Item::field(const QString &field_name) const
{
    int ret = AbstractItem::field(field_name);
    if (ret != AbstractItem::UndefinedData) return ret;

    if (field_name == VALUE_FIELD_NAME) return Item::ValueData;

    return AbstractItem::UndefinedData;
}



QVariant Item::value() const
{
    return data(ValueData);
}



void Item::setValue(const QVariant &value)
{
    setData(ValueData, value);
}



QVariant Item::customData(const int& data_type) const
{
    switch (data_type)
    {
    case ValueData:
        return d->value;

    }

    return QVariant();
}



void Item::setCustomData(const int & data_type, const QVariant & data)
{
    switch (data_type)
    {
    case ValueData:
        if (d->value == data) return;
        d->value = data;
        break;

    default:
        return;
    }

    emit sigDirty();

}




